/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.flowernet.faces;

import br.com.flowernet.dao.ProdutoDAO;
import br.com.flowernet.entity.Produto;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import org.primefaces.model.UploadedFile;

/**
 *
 * @author Felipe
 */
@ManagedBean
@SessionScoped
public class ProdutoFaces implements Serializable {

    @EJB
    private ProdutoDAO produtoDao;
    private Produto produtoSelecionado;
    private List<Produto> produtos;
    private UploadedFile file;
    private Produto produtoDesc;

    /**
     * Creates a new instance of ProdutoFaces
     */
    public ProdutoFaces() {
    }

    public Produto getProdutoSelecionado() {
        return produtoSelecionado;
    }

    public void setProdutoSelecionado(Produto produtoSelecionado) {
        this.produtoSelecionado = produtoSelecionado;
    }

    public UploadedFile getFile() {
        return file;
    }

    public void setFile(UploadedFile file) {
        this.file = file;
    }

    public List<Produto> getProdutos() {
        produtos = new LinkedList<Produto>();
        produtos = produtoDao.getAllProdutos();
        return produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }

    public String iniciarAddProduto() {
        produtoSelecionado = new Produto();
        return "addProduto";
    }

    public String finalizarAddProduto() {
        FacesMessage msg = null;


        if (file != null) {
            byte[] foto = file.getContents();
            ExternalContext econtext = FacesContext.getCurrentInstance().getExternalContext();
            ServletContext sc = (ServletContext) econtext.getContext();

            String caminho = sc.getRealPath("upload");
            char[] caracter = null;
            char old = '\\';
            char newchar = '/';

            caminho = caminho.replace(old, newchar);

            criaArquivo(foto, caminho + "/" + file.getFileName());


            produtoSelecionado.setImagem("upload/" + file.getFileName());
            msg = new FacesMessage("Succesful", file.getFileName() + " is uploaded.");
            FacesContext.getCurrentInstance().addMessage(null, msg);
            produtoDao.addProduto(produtoSelecionado);
            produtoSelecionado = null;
            return "listarProdutos";
        }
        msg = new FacesMessage("É obrigatório o campo Imagem.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
        return null;

    }

    public void criaDiretorio(String caminho) {
        ServletContext context = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
        File diretorio = new File(caminho);
        if (!diretorio.exists()) {
            diretorio.mkdirs();
        }
    }

    public Produto getProdutoDesc() {
        return produtoDesc;
    }

    public void setProdutoDesc(Produto produtoDesc) {
        this.produtoDesc = produtoDesc;
    }

    public String excluirProduto() {
        produtoDao.removerProduto(produtoSelecionado);
        produtoSelecionado = null;
        return "ListarProdutos";
    }

    public String iniciarEditarProduto() {


        return "EditarProduto";

    }
    
        public String finalizarEditarProduto() {

        produtoDao.updateProduto(produtoSelecionado);
        produtoSelecionado = null;
        return "ListarProdutos";
    }


    public void criaArquivo(byte[] bytes, String caminho) {
        FileOutputStream fos;
        try {
            fos = new FileOutputStream(caminho);
            fos.write(bytes);
            fos.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Produto.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Produto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
